package com.cskaoyan.javase._1extends._0introduction._1new;

/**
 * 根据我们之前学过的知识，完成如下练习：
 * 分别定义一个表示人和学生的类：
 * 人类：有姓名属性，以及吃饭这个行为
 * 教师类：有姓名，教师号两个属性，同时有吃饭，教学两种行为
 * 学生类：有姓名，学号两个属性，同时有吃饭，学习两种行为
 *
 * 很明显，像成员变量name，方法eat等都是被重复定义的成员。
 *      既然有重复，那就想复用它们，现在的需求是：复用类的成员。怎么做呢？
 * Java中对代码的直接复用依赖于某一个方法，而想要复用类的成员，就必须使用Java中的继承语法。
 *
 * Java中的继承,本质是对类的成员的复用.
 * 继承的语法:
 * Java在定义一个类时，可以显式地，直接让它继承另一个类，这就是Java的继承机制，其语法是：
 * [访问权限修饰符] class 类名 extends 被继承的类/已经存在的某个类{
 *     // 类体
 * }
 * 解释:
 *      1.extends关键字表示继承
 *      2.被继承的类被称之为"父类",继承父类的类被称之为"子类"
 *      3.继承后,子类会得到父类的所有成员.
 *          注: 这里的成员仅考虑普通成员,静态成员实际上不能被继承
 *          更不考虑构造器
 *      4.子类继承父类后
 *          可以在得到父类成员的基础上
 *          再自定义自己的成员
 *          所以从功能上来说
 *              子类往往比父类更加强大
 *              至少不会比父类差
 *              "青出于蓝而胜于蓝"
 *          所以Java中的继承使用"extends"关键字
 *          子类继承父类,实际上是子类扩展了父类
 *
 *      5.父类中没有的东西,子类继承不来.
 *
 *
 * @since 15:59
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo {
    public static void main(String[] args) {
        Student s = new Student();
        System.out.println(s.name);
        Teacher t = new Teacher();
        t.eat();

        // t.play();
    }
}

class Person {
    String name;

    public void eat() {
        System.out.println("人最重要的事情就是吃饭!");
    }
}

class Teacher extends Person {
    int teacherId;

    public void teach() {
        System.out.println("老师除了吃饭之外,最重要的事情就是上课!");
    }
}

class Student extends Person {
    int stuId;

    public void study() {
        System.out.println("学习!");
    }
}